package san.java.day10;

/**
 * 异常: 在java中,将程序执行过程中发生的不正常情况(意料之外的情况)成为 "异常"
 *  如文件没找到, 网络错误, 非法参数
 *
 * 异常事件可分为两类:
 *  1. Error: JVM系统内部错误,资源耗尽等严重情况
 *  2. Exception: 其他因变成错误或偶然的外在因素导致的一般性问题,例如:
 *      i   空指针访问
 *      ii  试图读取不存在的文件(文件描述符错误)
 *      iii 网络连接中断
 *
 * 常见异常:
 *  RuntimeException:
 *      - 错误的类型转换
 *      - 数组下标越界
 *      - 空指针
 *
 *  IOException:
 *      - 文件描述符错误
 *      - 越过文件结尾继续读取EOFException
 *      - 连接一个不存在的URL
 *
 */

public class Exception_01 {

    public static void main(String[] args) {
        String[] strs = new String[]{"a", "b", "c"};

        /**
         * 异常举例: 1. 数组越界异常
         */
//        for (int i = 0; i < 4; i++) {
//            // java.lang.ArrayIndexOutOfBoundsException: 3
//            System.out.println(strs[i]);
//        }

        /**
         * 2. 空指针异常
         */
        A a = null;

        try {
            System.out.println(a.i);
        } catch (Exception e) {
            e.printStackTrace();
            e.getMessage();
        }

        /**
         * 3. 除数为0
         */
        int i = 0;
//        System.out.println(1/i);
        System.out.println("ok");
    }

}

class A {
    int i;
}
